iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
1
Software Development

C++ 30天屠龍記系列 第 7

C++ 30天屠龍記(第7天): Vector 與他的兄弟(一)

  • 分享至 

  • xImage
  •  

Vector(向量)

變數可以儲存一項資料,但要儲存多筆資料的時候,往往就力不從心

int age1, age2, age3, age4, age5, age6, age7;

age重複了7次,這樣的重複是很大的困擾,但不要緊,我們有新的方法去使用。

向量是什麼

Vector這裡先用一下hannahpun大大的圖,因為這真的很精緻

你們都知道變量像是一個箱子,那麼vector如圖所示就是一個裝著很多變量的箱子,就像圖片所示那樣

如果難以理解的話可以當變量是一箱貨物?,而vector 就是裝著貨物的一個貨櫃這樣,而貨櫃多數裝著同類型的貨物,vector也一樣,基本上裝著一個類型的變量而已。

  • vector在搜尋速度上是最快的
  • 但如果你需要改動vector很多次,那麼速度就會很慢。

如何建立向量

https://ithelp.ithome.com.tw/upload/images/20190916/20120557VjeQPQnzYj.png

  • 必須在開頭導入vector庫,也就是#include<vector>
  • 儲存的數據必須是同樣的類型

例子

vector<string> bags;
vector<string> bag(10);
vector<string> bag = {"屠龍刀","睏仙索","桂圓","?"};
  • 10 是vector能存變量的大小(他會自動擴容)

使用向量

  • 在vector後面加入一個變量
bag.emplace_back("豪大大?"); 
//bag現在包含了 {"屠龍刀","睏仙索","桂圓","?","豪大大雞排"}
  • 移除原本vector最後面的一個變量
bag.pop_back(); 
//bag現在包含了 {"屠龍刀","睏仙索","桂圓","?"}
  • 輸出一個變量
cout << people_age[5];
// 輸出第六個variable, 因為 第一個叫 0....
  • Vector的大小
cout << people_age.size();
// 7
  • 改變vector大小
people_age.resize(20);
// 20 是新vector的大小
  • Vector 是否為空
cout << people_age.empty();
// false

Vector的三個兄弟,List,Deque和String

其實Vector本身有三個兄弟(實際上不只),包括你們可能不知道的List,Deque 和你們一直在用的String。

那先重新介紹一下這四個東西

介紹

任務 List Vector Deque
增刪結構元素 中庸
讀取速度 中庸

有興趣的人可以看看這個評測,裡面光看圖就可以了解三者的分別,但最常用的就是Vector。

String 就是一個內容為char字元的 Vector ,但是他有比較多的函數可以使用,讓用的人更方便(String本身我會另寫一篇去解釋)

異同功能列舉

//引入
#include<vector>
#include<list>
#include<deque>
#include<string>

//建立
vector<int> numbers_v = {1,5,3,5,6,3,2};
list<int> numbers_l = {1,5,3,5,6,3,2};
deque<int> numbers_d = {1,5,3,5,6,3,2};
string numbers{"1535632"}

//建立 String
string str = "hello";
auto str = "hello"s;
auto str = "hello"sv; //這是constant不變String

// List 和 Deque 都有在前方插/刪除元素的功能
numbers_l.emplace_front(2);
numbers_d.emplace_front(4);
numbers_l.pop_front(2);
numbers_l.pop_front(2);


  • 其他的都一樣用法,包括下一篇會提的通用函數

上一篇
第6天:一文拆解C++函數
下一篇
C++ 30天屠龍記(第8天): Vector 與他的兄弟(二):神級通用函數
系列文
C++ 30天屠龍記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
hannahpun
iT邦新手 3 級 ‧ 2019-09-23 03:47:19

自己做的圖被別人用到也是蠻開心的!明明差不多概念東西真的在每個語言名稱都不一樣呢

0
hannahpun
iT邦新手 3 級 ‧ 2019-09-23 03:47:20

自己做的圖被別人用到也是蠻開心的!明明差不多概念東西真的在每個語言名稱都不一樣呢

alantsui iT邦新手 5 級 ‧ 2019-09-23 11:11:32 檢舉

謝謝你la

alantsui iT邦新手 5 級 ‧ 2019-09-23 11:24:02 檢舉

其實C++是為了向後兼容C和舊C++才改其他名字啦。很多Syntax都這樣。那個C的Array在功能上就差得遠了

我要留言

立即登入留言